package simple.array;

/**
 * <a href="https://leetcode.cn/problems/find-the-array-concatenation-value/description/">2562. 找出数组的串联值</a>
 * 给你一个下标从 0 开始的整数数组 nums 。
 * 现定义两个数字的 串联 是由这两个数值串联起来形成的新数字。
 * 例如，15 和 49 的串联是 1549 。
 * nums 的 串联值 最初等于 0 。执行下述操作直到 nums 变为空：
 *   如果 nums 中存在不止一个数字，分别选中 nums 中的第一个元素和最后一个元素，将二者串联得到的值加到 nums 的 串联值 上，然后从 nums 中删除第一个和最后一个元素。
 *   如果仅存在一个元素，则将该元素的值加到 nums 的串联值上，然后删除这个元素。
 * 返回执行完所有操作后 nums 的串联值。
 * 示例 1：
 *   输入：nums = [7,52,2,4]
 *   输出：596
 *   解释：在执行任一步操作前，nums 为 [7,52,2,4] ，串联值为 0 。
 *     - 在第一步操作中：
 *       我们选中第一个元素 7 和最后一个元素 4 。
 *       二者的串联是 74 ，将其加到串联值上，所以串联值等于 74 。
 *       接着我们从 nums 中移除这两个元素，所以 nums 变为 [52,2] 。
 *     - 在第二步操作中：
 *       我们选中第一个元素 52 和最后一个元素 2 。
 *       二者的串联是 522 ，将其加到串联值上，所以串联值等于 596 。
 *       接着我们从 nums 中移除这两个元素，所以 nums 变为空。
 *       由于串联值等于 596 ，所以答案就是 596 。
 * 示例 2：
 *   输入：nums = [5,14,13,8,12]
 *   输出：673
 *   解释：在执行任一步操作前，nums 为 [5,14,13,8,12] ，串联值为 0 。
 *     - 在第一步操作中：
 *       我们选中第一个元素 5 和最后一个元素 12 。
 *       二者的串联是 512 ，将其加到串联值上，所以串联值等于 512 。
 *       接着我们从 nums 中移除这两个元素，所以 nums 变为 [14,13,8] 。
 *     - 在第二步操作中：
 *       我们选中第一个元素 14 和最后一个元素 8 。
 *       二者的串联是 148 ，将其加到串联值上，所以串联值等于 660 。
 *       接着我们从 nums 中移除这两个元素，所以 nums 变为 [13] 。
 *     - 在第三步操作中：
 *       nums 只有一个元素，所以我们选中 13 并将其加到串联值上，所以串联值等于 673 。
 *       接着我们从 nums 中移除这个元素，所以 nums 变为空。
 *       由于串联值等于 673 ，所以答案就是 673 。
 * 提示：
 *   1 <= nums.length <= 1000
 *   1 <= nums[i] <= 10^4
 * @author 刘学松
 * @date 2023-10-12 17:03
 */
public class 找出数组的串联值 {
    public long findTheArrayConcVal(int[] nums) {
        long sum = 0;
        int l = 0, r = nums.length - 1;
        while (l < r) {
            sum += nums[l] * getMulti(nums[r]) + nums[r];
            r--;
            l++;
        }
        if (l == r) {
            return sum + nums[l];
        }
        return sum;
    }

    public long getMulti(int num) {
        if (num > 9999) {
            return 100000;
        } else if (num > 999) {
            return 10000;
        } else if (num > 99) {
            return 1000;
        } else if (num > 9) {
            return 100;
        } else {
            return 10;
        }
    }
}
